package com.etime.shycourse.services.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.etime.shycourse.config.Tools;
import com.etime.shycourse.dao.CoursescoreMapper;
import com.etime.shycourse.dto.CurrentUser;
import com.etime.shycourse.pojo.Coursescore;
import com.etime.shycourse.services.interfaces.CoursescoreServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * <p>
 * 备注：一个用户只能给课程打一次分。分数可以修改，但是只有一条记录 服务实现类
 * </p>
 *
 * @author wb
 * @since 2022-03-04
 */
@Service
public class CoursescoreServiceImpl extends ServiceImpl<CoursescoreMapper, Coursescore> implements CoursescoreServices {
    @Autowired
    private CoursescoreMapper mapper;
    @Autowired
    private Tools tools;

    /**
     * 查询用户是否评论过该课程，如果有评论，则修改原来的评分；
     * 如果没有，则添加对该课程的评论；
     *
     * @param token
     * @param coursescore
     * @return int
     **/
    @Override
    public int insertOrUpdateCourseScore(String token, Coursescore coursescore) {
        CurrentUser user = tools.getCurrentUserFromRedis(token);
        // 判断用户 课程id是否存在 不存在直接返回null
        if (user == null) {
            return 0;
        }
        // 1 对用户是否进行评分进行判断
        Coursescore core = selectCoreByUserIdCourseId(token, coursescore);
        if (core == null) {
            // 第一种 情况 该用户没有进行课程的评分 进行插入
            // 设置 评论用户的id
            coursescore.setCuserid(user.getUser().getUserid());
            // 设置课程评分的时间
            coursescore.setCtime (new Date ());
            return mapper.insert (coursescore);
        } else {
            // 第二种 情况 该用户有进行课程的评分  进行修改
            // 设置课程评分的时间
            core.setCtime (new Date ());
            // 设置课程的评分
            core.setCscore (coursescore.getCscore ());
            return mapper.updateById (core);
        }
    }

    /**
     * 根据用户id和课程id 查询到用户对改课程的评分
     *
     * @param token
     * @param coursescore
     * @return Coursescore
     */
    @Override
    public Coursescore selectCoreByUserIdCourseId(String token, Coursescore coursescore) {
        CurrentUser user = tools.getCurrentUserFromRedis (token);
        // 判断用户 课程id是否存在 不存在直接返回null
        if (coursescore.getCcourseid () == null && user == null) {
            return null;
        }
        QueryWrapper<Coursescore> wrapper = new QueryWrapper<> ();
        // 用户id
        wrapper.eq ("ccourseid", coursescore.getCcourseid ());
        // 课程id
        wrapper.eq ("cuserid", user.getUser ().getUserid ());

        return mapper.selectOne (wrapper);
    }
}
